{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:07:23.422439300Z",
     "start_time": "2023-12-19T09:07:23.418423100Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [
    "data = pd.read_csv(\"d://data//otto//train.csv\")"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:07:26.958928Z",
     "start_time": "2023-12-19T09:07:26.304532100Z"
    }
   },
   "id": "796e7a7a1632153e"
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 2.1.确定x和y"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "d4d8255846e7eae4"
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [],
   "source": [
    "x = data.drop([\"id\", \"target\"], axis=1)  #id没用的，target用来作为y值\n",
    "y = data[\"target\"]"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:07:48.961283800Z",
     "start_time": "2023-12-19T09:07:48.914401700Z"
    }
   },
   "id": "72aedd65b6393f2a"
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [],
   "source": [
    "### 方法1.减少过采样样本数\n",
    "from imblearn.under_sampling import RandomUnderSampler\n",
    "\n",
    "rus = RandomUnderSampler(random_state=0)\n",
    "x_resampled, y_resampled = rus.fit_resample(x, y)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:08:41.515548600Z",
     "start_time": "2023-12-19T09:08:39.412862700Z"
    }
   },
   "id": "34c32885197b3df2"
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "array([0, 0, 0, ..., 8, 8, 8])"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "encoder = LabelEncoder()\n",
    "y_resampled = encoder.fit_transform(y_resampled)\n",
    "y_resampled"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:09:05.218169800Z",
     "start_time": "2023-12-19T09:09:05.193178200Z"
    }
   },
   "id": "bace99119431e99a"
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "trainX, testX, trainY, testY = train_test_split(x_resampled, y_resampled, test_size=0.2)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:09:15.992028600Z",
     "start_time": "2023-12-19T09:09:15.947974800Z"
    }
   },
   "id": "7300286dd40e5736"
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "rf = RandomForestClassifier(oob_score=True)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:09:30.206837400Z",
     "start_time": "2023-12-19T09:09:30.179056100Z"
    }
   },
   "id": "3aabf9826ccac8bd"
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测值= [6 8 1 ... 6 8 6]\n",
      "得分= 0.7650446300028794\n",
      "包外估计得分= 0.768793202764977\n"
     ]
    }
   ],
   "source": [
    "rf.fit(trainX, trainY)\n",
    "\n",
    "pre = rf.predict(testX)\n",
    "print(\"预测值=\", pre)\n",
    "score = rf.score(testX, testY)\n",
    "oScore = rf.oob_score_  # 包外估计得分\n",
    "\n",
    "print(\"得分=\", score)\n",
    "print(\"包外估计得分=\", oScore)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:09:44.866801200Z",
     "start_time": "2023-12-19T09:09:39.221436900Z"
    }
   },
   "id": "aaab5b4617545105"
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "y_true and y_pred contain different number of classes 9, 2. Please provide the true labels explicitly through the labels argument. Classes found in y_true: [0 1 2 3 4 5 6 7 8]",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mValueError\u001B[0m                                Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[9], line 4\u001B[0m\n\u001B[0;32m      1\u001B[0m \u001B[38;5;66;03m# logloss模型评估\u001B[39;00m\n\u001B[0;32m      2\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01msklearn\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mmetrics\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m log_loss\n\u001B[1;32m----> 4\u001B[0m \u001B[43mlog_loss\u001B[49m\u001B[43m(\u001B[49m\u001B[43mtestY\u001B[49m\u001B[43m,\u001B[49m\u001B[43mpre\u001B[49m\u001B[43m,\u001B[49m\u001B[43meps\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m1e-15\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43mnormalize\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m)\u001B[49m\n\u001B[0;32m      5\u001B[0m \u001B[38;5;66;03m# 注意，运行会报ValueError: y_true and y_pred contain different number of classes....错！原因：\u001B[39;00m\n\u001B[0;32m      6\u001B[0m \u001B[38;5;66;03m#logloss使用过程中,必须要求将输出用one-hot表示，需要将这个多类别问题的输出结果通过OneHotEncoder\u001B[39;00m\n",
      "File \u001B[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py:214\u001B[0m, in \u001B[0;36mvalidate_params.<locals>.decorator.<locals>.wrapper\u001B[1;34m(*args, **kwargs)\u001B[0m\n\u001B[0;32m    208\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m    209\u001B[0m     \u001B[38;5;28;01mwith\u001B[39;00m config_context(\n\u001B[0;32m    210\u001B[0m         skip_parameter_validation\u001B[38;5;241m=\u001B[39m(\n\u001B[0;32m    211\u001B[0m             prefer_skip_nested_validation \u001B[38;5;129;01mor\u001B[39;00m global_skip_validation\n\u001B[0;32m    212\u001B[0m         )\n\u001B[0;32m    213\u001B[0m     ):\n\u001B[1;32m--> 214\u001B[0m         \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m    215\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m InvalidParameterError \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[0;32m    216\u001B[0m     \u001B[38;5;66;03m# When the function is just a wrapper around an estimator, we allow\u001B[39;00m\n\u001B[0;32m    217\u001B[0m     \u001B[38;5;66;03m# the function to delegate validation to the estimator, but we replace\u001B[39;00m\n\u001B[0;32m    218\u001B[0m     \u001B[38;5;66;03m# the name of the estimator by the name of the function in the error\u001B[39;00m\n\u001B[0;32m    219\u001B[0m     \u001B[38;5;66;03m# message to avoid confusion.\u001B[39;00m\n\u001B[0;32m    220\u001B[0m     msg \u001B[38;5;241m=\u001B[39m re\u001B[38;5;241m.\u001B[39msub(\n\u001B[0;32m    221\u001B[0m         \u001B[38;5;124mr\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mparameter of \u001B[39m\u001B[38;5;124m\\\u001B[39m\u001B[38;5;124mw+ must be\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[0;32m    222\u001B[0m         \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mparameter of \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfunc\u001B[38;5;241m.\u001B[39m\u001B[38;5;18m__qualname__\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m must be\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[0;32m    223\u001B[0m         \u001B[38;5;28mstr\u001B[39m(e),\n\u001B[0;32m    224\u001B[0m     )\n",
      "File \u001B[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2903\u001B[0m, in \u001B[0;36mlog_loss\u001B[1;34m(y_true, y_pred, eps, normalize, sample_weight, labels)\u001B[0m\n\u001B[0;32m   2901\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(lb\u001B[38;5;241m.\u001B[39mclasses_) \u001B[38;5;241m!=\u001B[39m y_pred\u001B[38;5;241m.\u001B[39mshape[\u001B[38;5;241m1\u001B[39m]:\n\u001B[0;32m   2902\u001B[0m     \u001B[38;5;28;01mif\u001B[39;00m labels \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[1;32m-> 2903\u001B[0m         \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m   2904\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124my_true and y_pred contain different number of \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2905\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mclasses \u001B[39m\u001B[38;5;132;01m{0}\u001B[39;00m\u001B[38;5;124m, \u001B[39m\u001B[38;5;132;01m{1}\u001B[39;00m\u001B[38;5;124m. Please provide the true \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2906\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mlabels explicitly through the labels argument. \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2907\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mClasses found in \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2908\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124my_true: \u001B[39m\u001B[38;5;132;01m{2}\u001B[39;00m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;241m.\u001B[39mformat(\n\u001B[0;32m   2909\u001B[0m                 transformed_labels\u001B[38;5;241m.\u001B[39mshape[\u001B[38;5;241m1\u001B[39m], y_pred\u001B[38;5;241m.\u001B[39mshape[\u001B[38;5;241m1\u001B[39m], lb\u001B[38;5;241m.\u001B[39mclasses_\n\u001B[0;32m   2910\u001B[0m             )\n\u001B[0;32m   2911\u001B[0m         )\n\u001B[0;32m   2912\u001B[0m     \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m   2913\u001B[0m         \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m   2914\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mThe number of classes in labels is different \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2915\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfrom that in y_pred. Classes found in \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2916\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mlabels: \u001B[39m\u001B[38;5;132;01m{0}\u001B[39;00m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;241m.\u001B[39mformat(lb\u001B[38;5;241m.\u001B[39mclasses_)\n\u001B[0;32m   2917\u001B[0m         )\n",
      "\u001B[1;31mValueError\u001B[0m: y_true and y_pred contain different number of classes 9, 2. Please provide the true labels explicitly through the labels argument. Classes found in y_true: [0 1 2 3 4 5 6 7 8]"
     ]
    }
   ],
   "source": [
    "# logloss模型评估\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "log_loss(testY,pre,eps=1e-15,normalize=True)\n",
    "# 注意，运行会报ValueError: y_true and y_pred contain different number of classes....错！原因：\n",
    "#logloss使用过程中,必须要求将输出用one-hot表示，需要将这个多类别问题的输出结果通过OneHotEncoder"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:10:09.596689Z",
     "start_time": "2023-12-19T09:10:08.544271300Z"
    }
   },
   "id": "e8e2c1798f3f1bb0"
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:975: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n",
      "  warnings.warn(\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:975: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import OneHotEncoder\n",
    "\n",
    "oneHot = OneHotEncoder(sparse=False)\n",
    "\n",
    "testYTf = oneHot.fit_transform(testY.reshape(-1,1))\n",
    "preTf = oneHot.fit_transform(pre.reshape(-1,1))\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:10:19.705757100Z",
     "start_time": "2023-12-19T09:10:19.646960900Z"
    }
   },
   "id": "9513b670ced7cae2"
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2922: UserWarning: The y_pred values do not sum to one. Starting from 1.5 thiswill result in an error.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": "8.115070987114064"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_loss(testYTf,preTf,eps=1e-15,normalize=True)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:10:38.625228900Z",
     "start_time": "2023-12-19T09:10:38.577750800Z"
    }
   },
   "id": "c528bed18fde0a3f"
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[0.15, 0.14, 0.11, ..., 0.18, 0.18, 0.05],\n       [0.14, 0.06, 0.04, ..., 0.12, 0.12, 0.39],\n       [0.  , 0.39, 0.25, ..., 0.04, 0.  , 0.  ],\n       ...,\n       [0.1 , 0.02, 0.  , ..., 0.82, 0.02, 0.  ],\n       [0.05, 0.03, 0.02, ..., 0.03, 0.2 , 0.48],\n       [0.12, 0.03, 0.04, ..., 0.43, 0.05, 0.  ]])"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 改变预测值的输出模式，让输出结果为百分比，降低logloss值\n",
    "\n",
    "pre_proba = rf.predict_proba(testX)\n",
    "pre_proba"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:11:00.644625300Z",
     "start_time": "2023-12-19T09:11:00.497685Z"
    }
   },
   "id": "191464e552a2efbc"
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2922: UserWarning: The y_pred values do not sum to one. Starting from 1.5 thiswill result in an error.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": "0.7647827380440759"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_loss(testYTf,pre_proba,eps=1e-15,normalize=True)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T09:11:11.147090100Z",
     "start_time": "2023-12-19T09:11:11.104173900Z"
    }
   },
   "id": "2cd4c3d23483e536"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 调优"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "99f7c1ae0522e53c"
  },
  {
   "cell_type": "markdown",
   "source": [
    "### n_estimators调优"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "73df451fa4abfaea"
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\ensemble\\_forest.py:578: UserWarning: Some inputs do not have OOB scores. This probably means too few trees were used to compute any reliable OOB estimates.\n",
      "  warn(\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2922: UserWarning: The y_pred values do not sum to one. Starting from 1.5 thiswill result in an error.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\ensemble\\_forest.py:578: UserWarning: Some inputs do not have OOB scores. This probably means too few trees were used to compute any reliable OOB estimates.\n",
      "  warn(\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2922: UserWarning: The y_pred values do not sum to one. Starting from 1.5 thiswill result in an error.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 0.         0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 0.         0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 0.\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 1.10860161\n",
      " 0.         0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 1.10860161\n",
      " 1.10749758 0.         0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 1.10860161\n",
      " 1.10749758 1.1090873  0.         0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 1.10860161\n",
      " 1.10749758 1.1090873  1.1079428  0.         0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 1.10860161\n",
      " 1.10749758 1.1090873  1.1079428  1.10718501 0.         0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 1.10860161\n",
      " 1.10749758 1.1090873  1.1079428  1.10718501 1.10824816 0.\n",
      " 0.        ]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 1.10860161\n",
      " 1.10749758 1.1090873  1.1079428  1.10718501 1.10824816 1.10887974\n",
      " 0.        ]\n",
      "[1.11792009 1.1160126  1.1185698  1.11594338 1.1125408  1.11299103\n",
      " 1.1108815  1.11074417 1.11103097 1.10861634 1.10792152 1.10860161\n",
      " 1.10749758 1.1090873  1.1079428  1.10718501 1.10824816 1.10887974\n",
      " 1.10908903]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:2851: FutureWarning: Setting the eps parameter is deprecated and will be removed in 1.5. Instead eps will always havea default value of `np.finfo(y_pred.dtype).eps`.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "# 确定n_estimators的取值范围\n",
    "tuned_parameters = range(10,200,10)\n",
    "\n",
    "# 创建添加accuracy的一个numpy\n",
    "accuracy_t = np.zeros(len(tuned_parameters))\n",
    "\n",
    "# 创建添加error的一个numpy\n",
    "error_t = np.zeros(len(tuned_parameters))\n",
    "\n",
    "# *******************调优过程实现*******************\n",
    "for j, one_parameter in enumerate(tuned_parameters):\n",
    "    rf2 = RandomForestClassifier(n_estimators=one_parameter,\n",
    "                                 max_depth=10,\n",
    "                                 max_features=10,\n",
    "                                 min_samples_leaf=10,\n",
    "                                 oob_score=True,\n",
    "                                 random_state=0,\n",
    "                                 n_jobs=-1)\n",
    "    rf2.fit(trainX,trainY)\n",
    "    #输出accuracy\n",
    "    accuracy_t[j]=rf2.oob_score_\n",
    "    #输出log_loss\n",
    "    pre = rf2.predict_proba(testX)\n",
    "    error_t[j] = log_loss(testY,pre,eps=1e-15,normalize=True)\n",
    "    print(error_t)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T12:40:22.750064600Z",
     "start_time": "2023-12-19T12:40:08.030518400Z"
    }
   },
   "id": "1f24ce83039bd88d"
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 2000x400 with 2 Axes>",
      "image/png": "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Y9c71OOCwnKVVTWouKpOxVVN03MVVzUtIl908HvT403bT3Z0yfGYTU0XIXvYLPK0meVpsxy8f+i2+QTbf3q8aRSLTb6tme6rrl5ldfVt/r74OXYt+usah/p6IoYEMMXFxZo/f76ysrJavE9GRoauu+46lZWVtXjbli1b9Mknn2j58uWyWCx64IEH9I9//ENLly495feA9nGgqEortmVLkm6ZEifLcRZusphNumlynG55d6fe2palOSMi1NPf85jPBwAAADorf39/7du377DHKisrZbOdeBT4559/rlGjRh0W1Pj7+6ukpKTVx/o5p1Oc1LsAfXU9eux69Nj16PHJqa5vbA5Rfh6eHApXDt0urWlQSWWtGlvZY6vZpCAv28Gpuqw/C0GODEU8fhGQHG2bm8V03Km8TlZH+dnh59i16K8xDAlgFixYoFmzZmn79u0t3mf+/PmaO3fuUcOTY23bsWOHJk+erLi4ppEQs2bN0v/+979TKx7tatn6FDU6pUlxQRrTO/CEzx8fG6hRvQL0fXqpnt54QPfPHNgOVQIAAADta+jQoXr77beb72dkZKiurq5F04998sknOu+88444XkJCgsaNGydJ2r17t8LDw9u2aAAA2kFVXaPyK2qVb69V8c9GqRweqjR9rzmJqb38PaxNa5t4uTWFK542BXm5Kcj74GMH1z4J8nKTj7vFJYEJgM7DkABmyZIlio6O1gMPPNDifZ555hmZTKajBjDH2hYfH68333xTl19+uby8vLRixQqNHz/+lOtH+/juQIk2phTLYjbp5iktm07MZDLp5smxmrc8QZ/uLdAVp0dpUA/mNwQAAEDXMnr0aNntdq1cuVKzZ8/Ws88+q/Hjx8tisai8vFze3t6yWCxH7FdTU6PNmzdr8eLFhz1+zjnnaNGiRZo9e7YsFotWrFhx2BRlAAAYzel0qqymQfkVtSqw1ynPXnvwdq3yK5ruF9hrZa9t3dRf7lZz8yiVQ4FK820vm4K9bYqLDJS5rk7+HjZZXbT+CYCuyZAAJjo6+qT2yczMbNW2KVOm6JVXXtFZZ50lqemqruuuu67Vry01zemGtnGol8fraYPDqcfWJUuS5p4WqZhgrxYff2APX80YFKZPdudr2boUPXvpsG53tUFLeoxTQ49djx67Hj12PXrsevS47dHLzsFqter+++/XrbfeqqVLl8ps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b/HixTp16pR8fX0VFhamtWvXavXq1XrjjTcUFhamxx57TA8++KDWrFmjtWvXWq+0evLJJxUZGakXXnhBQ4YM0aBBg5Sbm6tu3bopKipKUVFRGjx4sN58801FRkZq69atki6ur+zj46PGjRvLw8NDbm5uuvvuu+Xj4yNvb2+tWbNGa9askbe3t5YuXUoRAQAAgJsedRN1E3UTAEdCAwYAypCzZ8/qyy+/1BdffKEBAwZo7NixBb5U/9W5c+f03HPPKTIyUkuWLFFGRobGjh0rScrIyLB+qV22bJmcnZ01ffp0SdL8+fO1adMmSRe/PG/atEn33nvvNcVYoUIF9erVS59++qmGDx+uihUrasuWLdq/f79GjBih0aNHa8WKFUpNTdXs2bOverzt27dryJAhev311zV79mz98ccf+uCDDwocc+LEiTpx4oQ++OAD1axZU5J08OBBjRs3Th9++KEWLlyoI0eOaOHChZKkzz77TGvXrlVgYKDc3d0lSRcuXNDx48fVqVMnrV27VmPGjFG3bt2sx8jPz9ekSZM0ZswYubu7y2KxyNXVVRaLRYcOHbJekXWJi4uLdXr9V199pVWrVmnJkiUKCwvT3Xffrc2bN2vixIn69NNP5eLioiFDhlgLg6ZNmyo3N1fPP/+8UlNTNXnyZLm5ualnz55aunSppk+frpSUFP3555/Kzc1VZmZmoVP3AQAAgJsRdRN1E3UTAEfBEmQAUIacP39eI0aM0O23367bbrtN77zzjk6fPm398vxX69atk6urq1566SVZLBb17t1bgwcPlvS/L7q5ubmqXr26Jk+erPz8fEmSp6en9T08PT3l5eV1zTF27txZv//+u+644w41bdpU1atXV15enoKCgvTzzz/L3d1d27dvV15enhISEq56vPnz5+vhhx/WPffcI+nizRp79+6tN954w7rGsKenp8aPH18gjkvT/HNzcxUQEKDvvvuu0HgvfdnPzc1VUFCQZsyYYS0UcnJyNHfuXEkXp9rPnj1bvr6+V7zH3r17rVPyC+Pi4qLFixdrypQpevzxx9WxY0eNHz9eixYt0sCBAzVlyhT17dtXP/zwg1588UUFBwfLyclJ48aNk7e3t0aNGqX+/furVq1aGjZsmIYOHarIyEht27ZN/v7+CgwMlJMT10wAAAAAEnWTRN1E3QTAUdCAAYAyxNvbW/Xr15f0vy/KhmEU+foTJ04oJSVFLVq0kHTxaqTMzExlZ2erQoUK+te//qWpU6fqnXfe0Z133qlhw4YpMDDwhmK8dGXUpf9ekpWVpWHDhmnz5s2qX7++nJycrIVLcZKSkqzxS1JQUJCysrKUkpKiatWqSdIVU/olKTAwUCNHjtSECRN05MgR3X333Xrrrbfk4+NT4HU5OTk6ePCgMjIyVLlyZUVFRal27drKzMxUcHCwQkNDra8trIjIycnRTz/9pB49eiguLu6K7YZh6LXXXlNubq4GDBigmJgYLVy4UI888ogWLVqkb775RoMGDdK3336rKVOm6LHHHtO0adPUsmVLPfvsszp16pTOnDkjf39/ffXVV0pOTtb69eu1atUqrV69Wg0aNFBYWNhV8wgAAADcLKibqJuomwA4ChowAFCGXH7F07W49dZb1bBhQ3344YeSLn6pzcjIkIuLi1JTU+Xr66s5c+YoOztbw4cP17vvvqvPP//cur/FYim2UCmJmTNnKj09XT///LNcXV01btw469rJxR3P399fiYmJ1seJiYmqUKFCgYKgYsWKVxwvOTlZjRs3VnR0tNLT0zVgwAB99tlneuuttwq8bsiQIWrSpIl1Orybm5tiY2O1YcOGIq/+utzKlSvl6uqqsLCwAoWEYRiyWCyyWCyaOHGi9bPVq1dPlSpV0rJly/T000+rdevWmjhxolasWKE2bdro2WeftRYsCxcu1Lx587R161a99957+vHHH/Xtt9/qlltu0QMPPKCOHTvqt99+04svvnjVOAEAAICbBXUTdRN1EwBHwbw8AHBgbdu2VVJSkrZv364KFSrohx9+0LPPPivDMHTmzBn16NFD69evV2pqqqSL6/leLigoSOvXr1dycrJ1reHrlZmZKcMwlJKSoqVLl2rOnDlXFA2FHS86OlpLly7VqlWrFB8fr7Fjx6pr167WafRF2b9/v3r37q0tW7ZYb1qZl5dn3Z6Tk6OzZ8/Kz89PUVFR8vb2VpUqVZSbm6vOnTtr5MiRxa4TLV1c2mDChAnq1auXdUr+JXPnztX7778vSdZYJ0yYoBdeeEF9+/ZVXl6eZs+ereeff15jxozRlClTdOLEiSuuFjt06JB27Nih/v37a+zYsXr88cclSVWqVFFERISOHTumdu3aFRsnAAAAgKJRN1E3AYC90IABAAfm5eWlzz77TNOnT9c999yjlStXavLkyXJxcVHdunU1ePBgjRgxQh06dFBCQoL++c9/Fth/xIgRmj59utq3b69vv/32hmJ55plnlJOTo/vvv1+xsbF6/PHHtXv37qser3Hjxho7dqzGjx+vp556Sg0bNtSgQYOueryIiAh17dpVL7/8su677z4ZhlHgiqe8vDw9+uijmjBhgmbNmqWOHTtKkrZu3arY2Fj98MMPmjx5spKSkuTiUnBC6KUlCfr16ycnJyc988wzkiQPDw9t2LBBc+fO1axZs65YKqBPnz5auHChpk+frqCgII0cOVL9+vVTZGSkVq1apSeeeOKKz/H6669r2rRpOnz4sBo2bKgPPvhAW7Zs0cqVK7Vx40ZVq1btinWcAQAAAFw76ibqJgCwF4thqzmUAACUQbt371avXr20YsUK69rIknTu3Dm1a9dO2dnZmj59eoH1lMPDwzVy5EjNmDFDw4cP1+233y5JOnv2rGbOnKmsrCx5enqqR48e1htj/uc//9Gnn36q48ePy8fHR61bt9a9996r5s2bF3lVWlxcnJYvX67NmzdrwIABevDBB7Vnzx598sknSkxM1KRJk+Tm5qZu3bopICBAkyZNUqVKlUzMFgAAAICbEXUTAJiDBgwAlHHNmzcv9Png4OAbvvrqZpGcnCw/P78rnt+0aZOCg4NVtWrVGz5Gbm6u9u7dqzp16sjDw+Oa9tmwYYNOnjypBx980Hrz0GPHjmnt2rXq2rWrXF1dJUnp6en69ddfdc8999xwnAAAAEB5RN1046ibAMD2aMAAQBl39OjRQp93dXUt9MsxAAAAANxsqJsAAGURDRgAAAAAAAAAAAAbc7J3AAAAAAAAAAAAAOUNDRgAAAAAAAAAAAAbowEDAAAAAAAAAABgYzRgAAAAAAAAAAAAbIwGDAAAAAAAAAAAgI3RgAEAAAAAAAAAALAxGjAAAAAAAAAAAAA2RgMGAAAAAAAAAADAxv4P0bq1jVJpN94AAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams['font.sans-serif']=['Simhei']\n",
    "\n",
    "fig,axes = plt.subplots(nrows=1, #一行两列\n",
    "                        ncols=2, \n",
    "                        figsize=(20,4),\n",
    "                        dpi=100)\n",
    "\n",
    "axes[0].plot(tuned_parameters,error_t)\n",
    "axes[0].set_xlabel(\"n_estimators调优参数\")\n",
    "axes[0].set_ylabel(\"错误率\")\n",
    "axes[0].grid(True)\n",
    "\n",
    "axes[1].plot(tuned_parameters,accuracy_t)\n",
    "axes[1].set_xlabel(\"n_estimators调优参数\")\n",
    "axes[1].set_ylabel(\"正确率\")\n",
    "axes[1].grid(True)\n",
    "\n",
    "plt.show()\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-19T13:21:28.408596400Z",
     "start_time": "2023-12-19T13:21:27.731203400Z"
    }
   },
   "id": "d997c2e69aa8541d"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "f8b42de8f17ebb06"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "43c01896c3c83727"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "78c30f0593489cc4"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "330f17f18140187e"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "755d2a94c9c7c275"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "2f4d9754e8a81491"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
